package com.samcai.swiperecyclerview.imp;

import java.util.List;

import android.view.View;

import com.samcai.swiperecyclerview.holder.RecyclerViewHolder;
import com.samcai.swiperecyclerview.listener.OnItemClickListener;
import com.samcai.swiperecyclerview.listener.OnItemLongClickListener;
import com.samcai.swiperecyclerview.listener.OnItemSelectedListener;
import com.samcai.swiperecyclerview.listener.OnSubItemClickListener;
import com.samcai.swiperecyclerview.view.LoaderView;


/**
 * RecyclerAdapter功能接口
 * 
 * @author samcai-work
 * @time 2016年1月25日下午7:17:34
 * @version 1.0
 * @param <T>
 * @describe [nothing]
 */
public interface RecyclerAdapterImp<T> {

	/**
	 * 设置ItemView点击监听事件
	 * 
	 * @time 2016年1月25日下午7:17:34
	 * @param listener
	 */
	void setOnItemClickListener(OnItemClickListener listener);

	/**
	 * 设置ItemView选择监听事件
	 * 
	 * @time 2016年2月3日下午5:08:02
	 * @param listener
	 */
	void setOnItemSelectedListener(OnItemSelectedListener listener);

	/**
	 * 设置ItemView长按监听事件
	 * 
	 * @time 2016年2月3日下午5:08:14
	 * @param listener
	 */
	void setOnItemLongClickListener(OnItemLongClickListener listener);

	/**
	 * 设置ItemView子view点击监听事件
	 * 
	 * @time 2016年1月25日下午7:12:13
	 * @param id
	 */
	void setOnSubItemClickListener(int subViewId, OnSubItemClickListener listener);

	/**
	 * 由ItemViewType显示不同ItemView时重写此方法
	 * 
	 * @time 2016年1月25日下午7:17:34
	 * @param viewType
	 * @return 错误返回null
	 */
	RecyclerViewHolder onCreateItemView(int viewType);

	/**
	 * 需要显示不同类型ItemView时复写此方法，返回View类型
	 * 
	 * @param position
	 * @return
	 */
	int setItemViewType(int position);

	void setHeaderView(View headerView);

	void setFooterView(View footerView);

	void setLoaderView(LoaderView loadView);

	void setData(T data);

	void setData(List<T> datas);

	void addData(T data);

	void addData(int position, T data);

	void addData(List<T> datas);

	void addData(int position, List<T> datas);

	T getData(int position);

	List<T> getData();

	void removeData(int position);
}
